package com.itheima.reggie.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.itheima.reggie.utils.ThreadLocalUtil;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.context.annotation.Configuration;

import java.time.LocalDateTime;

/**
 * Mp提供了公共属性自动填充
 *
 * @Author Vsunks.v
 * @Date 2022/8/11 14:37
 * @Blog blog.sunxiaowei.net/996.mba
 * @Description: Mp提供了公共属性自动填充，填充操作人和时间
 */
@Configuration
public class TimeAndOpMetaObjectHandler implements MetaObjectHandler {
    /**
     * 当执行新增操作时，如果对应是属性上标注有@TableField(fill = FieldFill.INSERT)
     * 就会自动调用该方法为被标注的成员变量赋值；再通过Mybatis保存到数据库
     * @param metaObject    元对象，通过该对象，可以为对应的属性赋值
     */
    @Override
    public void insertFill(MetaObject metaObject) {

        // 调用MetaObject的方法setValue(属性名，要设置的属性值)
        // 操作时间
        metaObject.setValue("createTime", LocalDateTime.now());
        metaObject.setValue("updateTime", LocalDateTime.now());

        // 操作人（id）
        metaObject.setValue("createUser", ThreadLocalUtil.getCurrentId());
        metaObject.setValue("updateUser", ThreadLocalUtil.getCurrentId());

    }

    /**
     * 当执行修改（和新增）操作时，如果对应是属性上标注有@TableField(fill = FieldFill.[INSERT_]UPDATE)
     * 就会自动调用该方法为被标注的成员变量赋值；再通过Mybatis保存到数据库
     * @param metaObject    元对象，通过该对象，可以为对应的属性赋值
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        // 操作时间
        metaObject.setValue("updateTime", LocalDateTime.now());

        // 操作人（id）
        metaObject.setValue("updateUser", ThreadLocalUtil.getCurrentId());
    }
}
